package com.br.egaragens.activitys;


import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.webkit.WebView;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ListView;

import com.br.egaragens.R;
import com.br.egaragens.Requisicao.Requisicao;
import com.br.egaragens.adaptadores.ConvenioAdapter;
import com.br.egaragens.controles.ConvenioController;
import com.br.egaragens.controles.EmpresasController;
import com.br.egaragens.controles.VeiculoController;
import com.br.egaragens.entidades.Convenio;
import com.br.egaragens.entidades.Empresa;
import com.br.egaragens.entidades.TipoVeiculo;
import com.br.egaragens.entidades.Usuario;
import com.br.egaragens.entidades.Veiculo;
import com.br.egaragens.qrcode.IntentIntegrator;
import com.br.egaragens.util.Util;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

public class ActivityMain extends Activity implements OnClickListener{

	private ProgressDialog dialog;
	private ImageButton btnTipoMoto;
	private ImageButton btnTipoCarro;
	private ImageButton btnTipoCaminhonete;
	private ImageButton btnFecharNormal;
	private ImageButton btnFecharConvenio;
	private ImageButton btnFecharSemCartao;
	private ImageButton btnNaGaragem;
	private ImageButton btnSincronizar;
	private ImageButton btnEntradaNormal;
	private ImageButton btnEntradaValor;
	private ImageButton btnEntradaMensalista;
	private Button btnEntradas;
	private Button btnSaidas;
	private Button btnRelatorio;
	private VeiculoController veiculoController;
	private EmpresasController empresasController;
	private ConvenioController convenioController;
	private Veiculo veiculo;
	private Convenio convenio;
	public static Empresa empresa;
	private List<Veiculo> lVeiculo;
	private List<Veiculo> lVeiculoPagos;
	private List<Convenio> lConvenios;
	public static Usuario usuario;
	private boolean flagEnvio=true;
	private boolean flagEnvioThread=true;
	//private Requisicao requisicao;
	public static final long TEMPO = 120;
	final ThreadEnvio envio = new ThreadEnvio();
	private Dialog dialogMenuEntrada;
	private Dialog dialogTipoEntrada;
	private Dialog dialogMenuSaida;
	private Dialog dialogRelatorio;
	private Dialog dialogValor;
	private Dialog dialogConveios;
	private WebView webViewRelatorio;
	private ListView listViewConvenio;
	private boolean flagConvenio = false;
	private SimpleDateFormat dtForm = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.escolha_tipo_fechamento);
		dialogMenuEntrada = new Dialog(this);
		dialogMenuEntrada.requestWindowFeature(Window.FEATURE_NO_TITLE);
		dialogMenuEntrada.setContentView(R.layout.escolha_veiculo_entrada);

		dialogTipoEntrada = new Dialog(this);
		dialogTipoEntrada.requestWindowFeature(Window.FEATURE_NO_TITLE);
		dialogTipoEntrada.setContentView(R.layout.escolha_tipo_entrada);

		dialogMenuSaida = new Dialog(this);
		dialogMenuSaida.requestWindowFeature(Window.FEATURE_NO_TITLE);
		dialogMenuSaida.setContentView(R.layout.escolha_saida);

		dialogRelatorio = new Dialog(this);
		dialogRelatorio.requestWindowFeature(Window.FEATURE_NO_TITLE);
		dialogRelatorio.setContentView(R.layout.relatorio_web);

		dialogValor = new Dialog(this);
		dialogValor.requestWindowFeature(Window.FEATURE_NO_TITLE);
		dialogValor.setContentView(R.layout.teclado_numerico);

		dialogConveios = new Dialog(this);
		dialogConveios.requestWindowFeature(Window.FEATURE_NO_TITLE);
		dialogConveios.setContentView(R.layout.listview_conveniados);


		veiculoController = new VeiculoController(getBaseContext());
		convenioController = new ConvenioController(getBaseContext());

		//requisicao = new Requisicao(getBaseContext());
		setButtons();
		setOnclicks();
		usuario =  (Usuario) getIntent().getSerializableExtra("usuario");
		if(usuario !=null)
			Util.usuario = usuario;
		empresasController = new EmpresasController(getBaseContext());
//		empresa = (Empresa) empresasController.getAll().get(0);
		//envio.start();
        Requisicao r = new Requisicao(this);
        r.execute("1");

	}

	private void setOnclicks() {
		listViewConvenio.setOnItemClickListener(new AdapterView.OnItemClickListener() {

			public void onItemClick(AdapterView<?> arg0, View arg1, int position,
					long arg3) {
				vibrate(TEMPO);
				convenio =(Convenio) listViewConvenio.getItemAtPosition(position);
				dialogConveios.dismiss();
				irTelaFinalizarSaida();
			}
		});

	}

	public void irTelaFinalizarSaida(){

		if(!veiculo.getTipoEntrada().equals("M"))
			veiculo.setTipoEntrada("C");

		veiculo.setConvenioID(convenio.getConvenioID());

		if(veiculo.getTipo() == TipoVeiculo.Medio){
			veiculo.setValorTotalHora(convenio.getVlrDescontoMedio());
			veiculo.setValorDescConvenio(convenio.getVlrDescontoMedio());
		}
		else
			if(veiculo.getTipo() == TipoVeiculo.Grande){
				veiculo.setValorTotalHora(convenio.getVlrDescontoGrande());
				veiculo.setValorDescConvenio(convenio.getVlrDescontoGrande());
			}
			else{
				veiculo.setValorTotalHora(convenio.getVlrDescontoMoto());
				veiculo.setValorDescConvenio(convenio.getVlrDescontoMoto());
			}


		Intent intent = new Intent(this, FinalizaEntrada.class);
		intent.putExtra("veiculo", veiculo);
		startActivity(intent);

	}
	public void onBackPressed(){
		flagEnvio = false;
		flagEnvioThread = true;
		finish();
	}
	private void setButtons() {

		btnTipoMoto = (ImageButton) dialogMenuEntrada.findViewById(R.id.btnTipoMoto);
		btnTipoMoto.setOnClickListener(this);

		btnTipoCarro= (ImageButton) dialogMenuEntrada.findViewById(R.id.btnTipoCarro);
		btnTipoCarro.setOnClickListener(this);

		btnTipoCaminhonete= (ImageButton) dialogMenuEntrada.findViewById(R.id.btnTipoCaminhonete);
		btnTipoCaminhonete.setOnClickListener(this);

		btnFecharNormal = (ImageButton) dialogMenuSaida.findViewById(R.id.btnSaidaNormal);
		btnFecharNormal.setOnClickListener(this);

		btnFecharConvenio = (ImageButton) dialogMenuSaida.findViewById(R.id.btnSaidaConvenio);
		btnFecharConvenio.setOnClickListener(this);

		btnFecharSemCartao = (ImageButton) dialogMenuSaida.findViewById(R.id.btnSaidaSemCartao);
		btnFecharSemCartao.setOnClickListener(this);

		btnNaGaragem = (ImageButton) findViewById(R.id.btnNaGaragem);
		btnNaGaragem.setOnClickListener(this);

		btnSincronizar = (ImageButton) findViewById(R.id.btnSincronizar);
		btnSincronizar.setOnClickListener(this);

		btnEntradas = (Button) findViewById(R.id.btnEntradas);
		btnEntradas.setOnClickListener(this);

		btnSaidas = (Button) findViewById(R.id.btnSaidas);
		btnSaidas.setOnClickListener(this);

		btnRelatorio = (Button) findViewById(R.id.btnRelatorio);
		btnRelatorio.setOnClickListener(this);

		btnEntradaNormal = (ImageButton) dialogTipoEntrada.findViewById(R.id.btnEntradaNormal);
		btnEntradaNormal.setOnClickListener(this);

		btnEntradaValor = (ImageButton) dialogTipoEntrada.findViewById(R.id.btnEntradaValor);
		btnEntradaValor.setOnClickListener(this);

		btnEntradaMensalista = (ImageButton) dialogTipoEntrada.findViewById(R.id.btnEntradaMensalista);
		btnEntradaMensalista.setOnClickListener(this);

		listViewConvenio = (ListView) dialogConveios.findViewById(R.id.listViewConvenio);
		//webViewRelatorio = (WebView) dialogRelatorio.findViewById(R.id.webViewRelatorio);
	}
	public void onClick(View v) {

		if(btnRelatorio.getId() == v.getId()){
			Intent i = new Intent(this, RelatorioWeb.class);
			startActivity(i);

		}

		if(btnEntradaNormal.getId() == v.getId()){
			vibrate(TEMPO);
			veiculo = new Veiculo();
			veiculo.setTipoEntrada("N");
			dialogTipoEntrada.dismiss();
			dialogMenuEntrada.show();
		}

		if(btnEntradaValor.getId() == v.getId()){
			vibrate(TEMPO);
			veiculo = new Veiculo();
			veiculo.setTipoEntrada("V");
			dialogTipoEntrada.dismiss();
			Intent i = new Intent(this, InformarValorManual.class);
			i.putExtra("veiculo", veiculo);
			startActivityForResult(i, 20);
		}

		if(btnEntradaMensalista.getId() == v.getId()){
			vibrate(TEMPO);
			veiculo = new Veiculo();
			veiculo.setTipoEntrada("M");
			dialogTipoEntrada.dismiss();
			dialogMenuEntrada.show();
		}

		if(btnEntradas.getId() == v.getId()){
			vibrate(TEMPO);
			dialogTipoEntrada.show();

		}
		if(btnSaidas.getId() == v.getId()){
			vibrate(TEMPO);
			veiculo = new Veiculo();
			dialogMenuSaida.show();
		}

		if(v.getId() == btnNaGaragem.getId()){
			vibrate(TEMPO);
			Intent i = new Intent(this, VeiculoLista.class);
			startActivity(i);
		}

		if(v.getId() == btnSincronizar.getId()){
			vibrate(TEMPO);
			if(verificaConexao()){
				if (flagEnvioThread) {
					System.out.println("************THREAD MANUAL************");
					dialog = ProgressDialog.show(ActivityMain.this, "Aguarde", "Atualizando dados...",false,true);
					envio.interrupt();

				}else
				{
					AlertDialog.Builder alBuilder = new AlertDialog.Builder(this);
					alBuilder.setTitle("Aten��o!");
					alBuilder.setMessage("J� existe um processo de atualiza��o em andamento, por favor aguarde o processo terminar!");
					alBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

						public void onClick(DialogInterface dialog, int which) {

						}
					});
					alBuilder.show();
				}

			}
		}

		if(v.getId() == btnTipoMoto.getId()){
			vibrate(TEMPO);
			dialogMenuEntrada.dismiss();
			veiculo.setTipo(TipoVeiculo.Motocicleta);
			veiculo.setUsuario(usuario.getUsuarioID());
			veiculo.setEmpresa(usuario.getEmpresaID());
			veiculo.setStatusEnvio(false);
			veiculo.setStatusEnvioPagamento(false);
			Intent intent = new Intent(this,CadastroEntradaVeiculo.class);
			intent.putExtra("veiculo", veiculo);

			startActivity(intent);
		}
		if(v.getId() == btnTipoCarro.getId()){
			vibrate(TEMPO);
			dialogMenuEntrada.dismiss();
			veiculo.setTipo(TipoVeiculo.Medio);
			veiculo.setUsuario(usuario.getUsuarioID());
			veiculo.setEmpresa(usuario.getEmpresaID());
			veiculo.setStatusEnvio(false);
			veiculo.setStatusEnvioPagamento(false);
			Intent intent = new Intent(this,CadastroEntradaVeiculo.class);
			intent.putExtra("veiculo", veiculo);

			startActivity(intent);
		}
		if(v.getId() == btnTipoCaminhonete.getId()){
			vibrate(TEMPO);
			dialogMenuEntrada.dismiss();
			veiculo.setTipo(TipoVeiculo.Grande);
			veiculo.setUsuario(usuario.getUsuarioID());
			veiculo.setEmpresa(usuario.getEmpresaID());
			veiculo.setStatusEnvio(false);
			veiculo.setStatusEnvioPagamento(false);
			Intent intent = new Intent(this,CadastroEntradaVeiculo.class);
			intent.putExtra("veiculo", veiculo);

			startActivity(intent);
		}
		if(v.getId() == btnFecharNormal.getId()){
			vibrate(TEMPO);
			dialogMenuSaida.dismiss();
			IntentIntegrator integrator = new IntentIntegrator(this);
			integrator.initiateScan();

		}
		if(v.getId() == btnFecharConvenio.getId()){
			vibrate(TEMPO);
			dialogMenuSaida.dismiss();
			flagConvenio = true;
			IntentIntegrator integrator = new IntentIntegrator(this);
			integrator.initiateScan();

		}

		if(v.getId() == btnFecharSemCartao.getId()){
			vibrate(TEMPO);
			dialogMenuSaida.dismiss();
			vibrate(TEMPO);
			Intent i = new Intent(this, VeiculoLista.class);
			startActivity(i);


		}
	}

	public void onActivityResult(int requestCode, int resultCode,Intent data){

		if(requestCode == 20 && data !=null){
			veiculo = (Veiculo) data.getSerializableExtra("veiculo");
			System.out.println("valor "+veiculo.getValorTotalHora());
			dialogMenuEntrada.show();
		}

		if(resultCode == RESULT_OK){

			String qrCode = data.getStringExtra("SCAN_RESULT");

			if(validaQrCode(qrCode) ){

				if(flagConvenio){

					if(veiculoController.getPeloQrcodeStatus(qrCode).size() > 0 ){
						veiculo =(Veiculo) veiculoController.getPeloQrcodeStatus(qrCode).get(0);

						if(!veiculo.getTipoEntrada().equals("V")){

							veiculo.setDtHoraSaida(dtForm.format(new Date()));
							veiculo.setUsuario(usuario.getUsuarioID());
							veiculo.setEmpresa(usuario.getEmpresaID());

							lConvenios = convenioController.getAll();
							listViewConvenio.setAdapter(new ConvenioAdapter(getBaseContext(), listViewConvenio, lConvenios,veiculo.getTipo()));
							dialogConveios.show();
							flagConvenio = false;

						}else{
							flagConvenio = false;
							AlertDialog.Builder alBuilder = new AlertDialog.Builder(this);
							alBuilder.setTitle("Aten��o!");
							alBuilder.setMessage("Veiculo foi informado valor a pagar manual," +
									" o mesmo n�o pode ser fechado como convenio!");
							alBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

								public void onClick(DialogInterface dialog, int which) {
									dialogConveios.dismiss();
								}
							});
							alBuilder.show();
						}

					}else{
						AlertDialog.Builder alBuilder = new AlertDialog.Builder(this);
						alBuilder.setTitle("Aten��o!");
						alBuilder.setMessage("N�o foi encontrado nenhum veiculo com " +
								"esse c�digo ou o mesmo j� foi fechado, favor verificar!");
						alBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

							public void onClick(DialogInterface dialog, int which) {

							}
						});
						alBuilder.show();
					}

				}else{

					if(veiculoController.getPeloQrcodeStatus(qrCode).size() > 0 ){

						veiculo =(Veiculo) veiculoController.getPeloQrcodeStatus(qrCode).get(0);
						veiculo.setDtHoraSaida(dtForm.format(new Date()));
						veiculo.setUsuario(usuario.getUsuarioID());
						veiculo.setEmpresa(usuario.getEmpresaID());

						Intent intent = new Intent(this, FinalizaEntrada.class);
						intent.putExtra("veiculo", veiculo);
						startActivity(intent);

					}else{
						AlertDialog.Builder alBuilder = new AlertDialog.Builder(this);
						alBuilder.setTitle("Aten��o!");
						alBuilder.setMessage("N�o foi encontrado nenhum veiculo com " +
								"esse c�digo ou o mesmo j� foi fechado, favor verificar!");
						alBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

							public void onClick(DialogInterface dialog, int which) {

							}
						});
						alBuilder.show();
					}
				}

			}else{
				AlertDialog.Builder alBuilder = new AlertDialog.Builder(this);
				alBuilder.setTitle("Aten��o!");
				alBuilder.setMessage("Este cart�o n�o � permitido para o USU�RIO. Use um cart�o com o n�mero entre " +usuario.getQtdCartoes().split(";")[0]+
						" � "+usuario.getQtdCartoes().split(";")[1]);
				alBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {

					public void onClick(DialogInterface dialog, int which) {

					}
				});
				alBuilder.show();
			}
		}

	}
	public boolean validaQrCode(String qrCode){

		if(qrCode.length() > 6){

			if(qrCode.toString().substring(0, 6).equals(String.format("%06d", empresa.getEmpresaID()))){
				return true;
			}
		}

		return false;

	}
	public  boolean verificaConexao() {  
		boolean conectado;  
		ConnectivityManager conectivtyManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);  
		if (conectivtyManager.getActiveNetworkInfo() != null  
				&& conectivtyManager.getActiveNetworkInfo().isAvailable()  
				&& conectivtyManager.getActiveNetworkInfo().isConnected()) {  
			conectado = true;  
		} else {  
			conectado = false;  
		}  
		if(conectado == false){

			AlertDialog.Builder alBuilder = new AlertDialog.Builder(ActivityMain.this);
			alBuilder.setTitle("Aten��o!");
			alBuilder.setMessage("Verifiquei que n�o h� conex�o ativa em seu aparelho, favor ativar a conex�o" +
					" com a internet e em seguida tentar novamente");
			alBuilder.setPositiveButton(" OK ", new DialogInterface.OnClickListener() {

				public void onClick(DialogInterface dialog, int which) {

				}
			});
			alBuilder.show();
		}
		return conectado;  
	}
	private void vibrate(long tempo) {
		Vibrator vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
		vibrator.vibrate(tempo);
	}
	public class ThreadEnvio extends Thread {  

		private final Object lock = new Object();  
		public void run() {  
			synchronized (lock) {  
				while(flagEnvio){
					try {


						if(flagEnvioThread){
							flagEnvioThread = false;
							lVeiculo =  veiculoController.getPeloStatusAberto();
							System.out.println("Qtd para envio normal= "+lVeiculo.size());

							if(lVeiculo.size() > 0){
								//requisicao.setVeiculo(lVeiculo,false);
								lVeiculo = null;
							}


							lVeiculoPagos = veiculoController.getPeloStatusAbertoFechamento();
							System.out.println("Qtd para envio pagos = "+lVeiculoPagos.size());

							if(lVeiculoPagos.size() > 0){
								//requisicao.setVeiculo(lVeiculoPagos,true);
								lVeiculoPagos =null;
							}

							//if(requisicao.getEmpresaUsuario()){
							//	empresa = (Empresa) empresasController.getAll().get(0);
							//}

							if(dialog != null)
								dialog.dismiss();
							flagEnvioThread = true;
							if(empresa.getTempoAtualiza() > 0){
								Thread.sleep(empresa.getTempoAtualiza());
							}else
								Thread.sleep(300000);
						}


					} catch (Exception e) {
						e.printStackTrace();

					}

				}
				System.out.println("Thread envio foi morta...");
			}  
		}  

	}
}
